package com.itheima.health.controller;

import com.itheima.health.common.MessageConst;
import com.itheima.health.entity.Result;
import com.itheima.health.service.MemberService;
import com.itheima.health.service.OrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author ：战神阿信
 * @date ：Created in 2022年06月08日
 * @description ：
 * @version: 1.0
 */
@RestController
@Slf4j
/**
 * 套餐预约占比饼形图
 */
@RequestMapping("/report")
public class ReportController {
    @Autowired
    private OrderService orderService;

    @GetMapping("/getSetmealReport")
    public Result getSetmealReport() {
        //查询统计数据
        List<Map<String, Object>> setmealCount = orderService.countBySetmeal();
        //构造 setMealNames
        List<String> setmealNames = new ArrayList<>();
        //遍历
        for (Map<String, Object> objectMap : setmealCount) {
            setmealNames.add(String.valueOf(objectMap.get("name")));
        }
        Map<String, Object> map = new HashMap<>();
        map.put("setmealNames", setmealNames);
        map.put("setmealCount", setmealCount);
        return new Result(true, MessageConst.GET_SETMEAL_COUNT_REPORT_SUCCESS, map);
    }

    /**
     * David Li
     * http://localhost:18080/api
     * 请求路径:/report/getMemberReport
     * get请求
     * 前端需要的数据:
     * "data":{
     * "months":["2018.07","2018.08","2018.09","2018.10","2018.11","2018.12","2019.01","2019.02","2019.03","2019.04","2019.05","2019.06"],
     * "memberCount":[0,0,0,0,0,0,0,0,3,3,3,6]
     */
    @Autowired
    private MemberService memberService;

    @GetMapping("/getMemberReport")
    public Result getMemberReport() {
        //分析:前端需要两个集合中的数据
        //实现:创建一个map集合,把两个集合放在map集合中,map集合里面元素为List集合,
        //创建两个List集合(一个放日期(String),一个放成员数量(Integer)),和一个map集合
        List<String> months = new ArrayList<>();
        List<Integer> memberCount = null;
        Map<String, Object> map = new HashMap<>();
        //完善mouth,分析:我们要的数据是,从现在时间起,12个月之前的所有月份
        //获取抽象类Calendar类的子类对象
        Calendar instance = Calendar.getInstance();
        //获取12个月之前的时间,按月份为单位,add方法
        instance.add(Calendar.MONTH, -12);
        //前端需要"2018.07",类型,,我们是yyyy-mm-DD类型,所以要进行一个格式的转换,而日期格式的转换要用到SimpleDateFormat对象
        // 创建一个带有格式的 SimpleDateFormat对象
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM");
        //做一个循环操作,把每个月的时间都转换成"yyyy.MM"格式
        for (int i = 0; i <= 12; i++) {
            //拿到每个月的日期对象
            Date time = instance.getTime();
            //每次循环加一个月
            instance.add(Calendar.MONTH, 1);
            //将日期装换为我们要的字符串格式========format(D--S),parse(S--D)
            String format = simpleDateFormat.format(time);
            //往month集合添加
            months.add(format);
        }
        //根据月份进行统计累加
        memberCount = memberService.doCountByMonth(months);

        //把数据放在map集合中
        map.put("months", months);
        map.put("memberCount", memberCount);
        return new Result(true, MessageConst.GET_MEMBER_NUMBER_REPORT_SUCCESS, map);

    }
}
